iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Security

腳本小子的滲透測試學習筆記系列 第 15

第15天:CEH第六章系統入侵

  • 分享至 

  • xImage
  •  

系統入侵是攻擊者最重要的目標之一,有時甚至是其最終目標。攻擊者透過足跡分析、掃描、枚舉和漏洞分析等技術來收集資訊,然後利用這些資訊來攻擊目標系統。本模組將重點介紹攻擊者用來入侵目標系統的工具和技術。


獲取存取權 (Gaining Access)

如在第一章中討論的,CEH 入侵方法論 (CEH Hacking Methodology, CHM) 包括攻擊者入侵系統時所遵循的各種步驟。以下章節將更詳細地討論這些步驟。第一步涉及攻擊者使用各種技術來獲取目標系統的存取權,這些技術包括破解密碼 (cracking passwords)、利用緩衝區溢位 (buffer overflow) 以及利用已識別的漏洞 (exploiting identified vulnerabilities) 進行攻擊。

破解密碼 (cracking passwords)

Microsoft 認證 (Microsoft Authentication)

Security Accounts Manager (SAM) 資料庫

Windows 將使用者密碼儲存在 SAM 中,或在網域中儲存在 Active Directory 資料庫中。密碼從不以明文形式儲存,而是經過哈希加密,結果儲存在 SAM 中。

NTLM 認證 (NTLM Authentication)

NTLM 認證協定類型如下:

  • NTLM 認證協定 (NTLM authentication protocol)
  • LM 認證協定 (LM authentication protocol)這些協定將使用者的密碼以不同的哈希方法儲存在 SAM 資料庫中。

Kerberos 認證 (Kerberos Authentication)

Microsoft 已將預設認證協定 (default authentication protocol) 升級為 Kerberos,這為客戶端/伺服器應用程式提供比 NTLM 更強的認證

How Hash Passwords Are Stored in Windows SAM?

在 Windows 的 Security Accounts Manager (SAM) 中,密碼不會以明文形式儲存,而是使用哈希算法進行加密處理。具體過程如下:

  1. 密碼輸入和哈希生成
    當用戶設定密碼或登入系統時,Windows 將該密碼通過哈希算法轉換成一個不可逆的哈希值。Windows 使用了多種哈希算法,包括 NTLM (NT LAN Manager)LM (LAN Manager)。新版本的 Windows 系統則主要使用 NTLM 而非較舊且較弱的 LM 協定。
  2. 哈希存儲於 SAM
    生成的哈希值將儲存在位於本地電腦的 SAM 資料庫 中,SAM 是一個文件,通常位於 C:\Windows\System32\Config\SAM 目錄下。這個檔案受到系統保護,無法直接被一般用戶讀取或修改。
  3. Active Directory 資料庫中的儲存
    在網域環境下,密碼哈希值會儲存在 Active Directory (AD) 資料庫 中。這使得用戶可以使用同一帳戶在多個設備上登入網域。
  4. 哈希驗證過程
    當用戶嘗試登入時,系統不會比較明文密碼,而是將輸入的密碼哈希化,再將其與儲存在 SAM 或 AD 中的哈希值進行比較。如果哈希值匹配,則用戶驗證成功,並允許登入。

這種機制能夠防止密碼以明文方式被儲存,但如果哈希值被破解(例如使用彩虹表或其他破解技術),攻擊者仍然可能取得用戶的登入憑證。

NTLM 認證過程包括三種挑戰–回應(Challenge-Response)認證方法:LMNTLMv1NTLMv2,三者的主要區別在於加密級別不同。在 NTLM 認證中,客戶端和伺服器會協商一種認證協議,這是通過 Microsoft 的 Security Support Provider (SSP) 來完成的。以下是 NTLM 協議中,客戶端向域控制器進行認證的過程:

  1. 輸入用戶名和密碼

    用戶在登入視窗中輸入用戶名和密碼。Windows 會將該密碼通過哈希算法處理,並生成密碼的哈希值。

  2. 發送登入請求

    客戶端計算出哈希值,並將登入請求與網域名稱一起發送到域控制器(Domain Controller)。

  3. 生成隨機字串

    域控制器生成一個 16 位元的隨機字串,稱為 nonce,並將其發送給客戶端。

  4. 加密 nonce

    客戶端電腦使用用戶密碼的哈希值來加密該 nonce,並將加密結果發送回域控制器。

  5. 比較加密結果

    域控制器從 SAM 資料庫 中檢索出用戶的密碼哈希值,並用該哈希值對 nonce 進行加密。然後,域控制器將加密後的值與從客戶端收到的加密值進行比較。如果兩者匹配,則認證成功,並允許用戶登入。


Kerberos 認證

是一種網路認證協議,透過對稱密鑰加密為客戶端/伺服器應用程式提供強大的認證功能,並且實現了雙方的相互認證。即用戶和伺服器都會驗證彼此的身份。通過此協議傳輸的訊息受到重放攻擊和竊聽的保護。

Kerberos 使用密鑰發佈中心 (KDC),它是一個被信任的第三方,並由兩個邏輯上獨立的部分組成:認證伺服器 (AS)票證授權伺服器 (TGS)。Kerberos 的授權機制為用戶提供票證授權票 (TGT),這在通過初步認證後,允許用戶訪問特定的服務,並且實現單一登入 (Single Sign-On),使得用戶不必再次輸入密碼來訪問任何被授權的服務。

特別的是,應用程式伺服器與 KDC 之間沒有直接通信;服務票證即使由 TGS 打包,最終也是通過想要訪問它的客戶端來傳遞給服務端。這種設計進一步提高了安全性和控制力。


  • Password Cracking 技術用於從計算機系統中恢復密碼
  • 攻擊者使用 Password Cracking 技術來未經授權地訪問脆弱的系統。
  • 大多數 Password Cracking 技術的成功原因是因為密碼過於或容易猜測

Non-Electronic Attacks(非電子攻擊)

  • 攻擊者不需要技術知識來破解密碼,因此稱為非技術攻擊。
  • 包括:
    • Shoulder Surfing(肩窺攻擊):攻擊者在受害者不注意時,通過觀察受害者鍵入密碼,通常發生在公開場所,如咖啡廳或辦公室。
    • Social Engineering(社交工程):攻擊者通過欺騙或利用人性弱點,誘使受害者自願透露敏感資訊,如密碼或安全問題的答案。
    • Dumpster Diving(垃圾桶潛水):攻擊者通過翻查目標的垃圾桶尋找有價值的資訊,如含有密碼的紙張或設備。
  • 這些攻擊不依賴技術,主要利用物理接近或心理操縱來竊取密碼,攻擊者不需要具備高超的技術能力。

Active Online Attacks(主動在線攻擊)

  • 攻擊者通過直接與受害者的設備通信來進行密碼破解。
  • 包括:
    • Dictionary Attack(字典攻擊):攻擊者使用包含常見密碼的預先定義字典進行嘗試破解,尤其是弱密碼。
    • Brute Forcing(暴力破解):攻擊者逐一嘗試所有可能的密碼組合,直到找到正確的密碼為止。這種方法非常耗時,尤其是密碼較長或複雜時。
    • Rule-based Attack(規則攻擊):基於已知密碼模式(如常見數字替換字母),嘗試破解密碼,通過規則生成多種可能的密碼變體。
    • Hash Injection Attack(哈希注入攻擊):攻擊者通過將偽造的哈希值注入認證系統來繞過密碼驗證過程。
    • Mask Attack(掩碼攻擊):攻擊者使用已知的部分密碼信息,結合其他可能的字符組合進行破解。
    • LLMNR/NBT-NS Poisoning(LLMNR/NBT-NS 投毒):攻擊者在本地網路中攔截和偽造網路請求,以獲取用戶憑據或密碼。
    • Trojan/Spyware/Keyloggers(木馬/間諜軟體/鍵盤記錄程式):攻擊者在受害者系統上安裝惡意軟件來記錄鍵入的密碼,或間諜軟件以竊取憑據。
    • Password Guessing/Spraying(密碼猜測/噴灑攻擊):攻擊者使用常見或簡單的密碼來嘗試登錄大量帳戶,而不是集中破解單一帳戶。
    • Internal Monologue Attack(內部對話攻擊):攻擊者利用系統內部漏洞,在不攔截網路流量的情況下,模擬用戶登錄過程來竊取憑據。
    • Cracking Kerberos Passwords(破解 Kerberos 密碼):攻擊者通過攻擊 Kerberos 認證機制來嘗試解密用戶密碼。
  • 這類攻擊通過直接與目標系統通信,利用各種技術漏洞來進行破解,例如字典攻擊、暴力破解,或使用木馬和間諜軟體來監視密碼輸入。

Passive Online Attacks(被動在線攻擊)

  • 攻擊者在不與授權方通信的情況下進行密碼破解。
  • 包括:
    • Wire Sniffing(線纜嗅探):攻擊者監聽網路流量,捕捉未加密的密碼信息,通常是在公共 Wi-Fi 或局域網環境中。
    • Man-in-the-Middle Attack(中間人攻擊):攻擊者攔截受害者與目標服務器之間的通信,並偽裝成雙方,竊取密碼信息或其他敏感數據。
    • Replay Attack(重播攻擊):攻擊者攔截合法用戶的認證信息,並在稍後時間重新發送這些信息,繞過身份驗證系統。
  • 被動在線攻擊不需要與受害者的設備進行直接交互,攻擊者可以通過監控網路流量來捕獲敏感信息,這些攻擊往往難以被察覺。

Offline Attacks(離線攻擊)

  • 攻擊者複製目標的password file(密碼文件),然後在其他系統上嘗試破解。
  • 包括:
    • Rainbow Table Attack(彩虹表攻擊):攻擊者使用預計算的哈希值與密碼文件中的哈希值進行比對,以便迅速破解密碼。彩虹表是加密哈希和明文密碼對應的預計算數據庫。
    • Distributed Network Attack(分佈式網路攻擊):攻擊者利用多台設備分散進行密碼破解,以加速破解過程。
  • 離線攻擊通常發生在攻擊者已經獲取目標系統中的密碼文件後,通過在其他系統中進行解密攻擊,這使攻擊者能夠利用更強大的資源進行大規模破解。

Password Recovery Tools(密碼恢復工具)

1. Elcomsoft Distributed Password Recovery

  • Elcomsoft 分佈式密碼恢復工具用於破解複雜密碼、恢復強加密密鑰並在生產環境中解鎖文檔。
  • 解釋: 這是一款強大的密碼破解工具,專門用來處理復雜的密碼和加密文件。它能分布式地利用多個設備來加速破解過程,適用於大規模恢復。

2. Password Recovery Toolkit

  • 解釋: 這個工具包允許用戶恢復存儲在本地系統中的密碼,支持多種文件類型和應用程序,尤其是在數據取證過程中有重要應用。

3. Passware Kit Forensic

  • Passware 取證套件
  • 解釋: 專為執法機構和數據取證專業人員設計,用於恢復加密文件和密碼。它支持多種加密格式,能夠快速解鎖各類受保護的數據。

4. hashcat

  • 解釋: 世界上速度最快的密碼破解工具之一,支持多種哈希算法,如 NTLM 和 MD5。hashcat 是一個開源的工具,可以在 GPU 上運行以加速破解速度。

5. Windows Password Recovery Tool

  • 解釋: 這款工具專為 Windows 系統設計,能夠恢復或重置 Windows 用戶賬號的密碼,適合用於忘記密碼或遭到鎖定的情況。

6. PCUnlocker

  • 解釋: 這款工具專門用於重置 Windows 的本地和域賬戶密碼,特別適合用於忘記登錄密碼或無法進入系統的情況。PCUnlocker 通過製作啟動盤來解鎖系統。

密碼破解使用 Domain Password Audit Tool (DPAT)

  • DPAT 是一個 Python 腳本,從域控制器中提取的密碼哈希和使用如 hashcat.pot 等工具生成的密碼破解文件來生成密碼使用統計數據。
    它會生成一個帶有可點擊鏈接的 HTML 報告,攻擊者可以打開這些鏈接來分析用戶名、當前密碼以及其他密碼統計數據。

使用 DPAT 的步驟:

  1. 生成報告: 從域控制器獲取密碼哈希並將它們存儲在哈希文件中(如 hashcat.pot)。
  2. 密碼破解: 使用 hashcat 等密碼破解工具對哈希進行破解。
  3. 統計數據分析: 運行 DPAT,並生成包含密碼破解統計數據的 HTML 報告。此報告將顯示密碼哈希數量、唯一哈希數量、破解的密碼百分比等。
  4. 查看報告: 使用網頁瀏覽器打開生成的 HTML 報告,攻擊者可以點擊報告中的鏈接,檢查有關密碼長度、重複使用的密碼等詳細信息。

DPAT 工具的用途:

  • 幫助管理員或安全人員快速了解系統中密碼的脆弱性。
  • 通過統計密碼哈希數據和分析用戶名、當前密碼歷史,讓用戶進一步了解系統中可能存在的重複密碼或弱密碼。

此工具能夠有效檢查域中的所有密碼,並生成詳細的報告以識別系統中的安全漏洞,使其成為密碼審計和強化系統安全的重要工具。


Password-Cracking Tools

  • L0phtCrack:
    • L0phtCrack 是一個用來審計密碼並恢復應用程式的工具。這個工具可用來檢查網路上密碼的強度和安全性。使用者可以通過載入密碼檔案來執行密碼破解,並可針對目標帳戶進行暴力破解或字典攻擊。
    • 使用方式:載入目標的密碼檔案,選擇攻擊類型(如字典攻擊、暴力攻擊),然後執行破解過程,工具會根據不同的密碼策略進行破解,並顯示進度與結果。
  • ophcrack:
    • ophcrack 是基於彩虹表(rainbow tables)的 Windows 密碼破解工具。它提供一個圖形化使用者介面(GUI),可以在多個平台上運行。彩虹表是一種快速破解加密哈希值的方式,適合針對常見的 Windows 密碼進行破解。
    • 使用方式:選擇或生成彩虹表,將目標系統的 NTLM 密碼哈希匯入,工具會自動對應彩虹表,並嘗試恢復明文密碼。
  • RainbowCrack:
    • RainbowCrack 使用彩虹表來破解哈希值,它運用了「時間-記憶體權衡」演算法來加速破解過程。彩虹表預先計算好一組哈希值對應的明文密碼,破解時只需查表即可大幅縮短破解時間。
    • 使用方式:匯入要破解的哈希值,選擇適用的彩虹表,工具會根據彩虹表快速進行匹配,並顯示破解結果。
  • John the Ripper:
    • 一個開源的密碼破解工具,專門用來測試密碼的強度。John the Ripper 支援多種加密演算法,適合用於字典攻擊和暴力攻擊。
    • 使用方式:匯入目標的加密密碼檔案,並選擇攻擊類型,如字典攻擊或暴力攻擊,John 會根據指定的字典或生成的密碼進行破解。
  • hashcat:
    • 一個強大的密碼破解工具,支援多種加密算法,並可以使用 GPU 進行高效能破解。hashcat 支援字典攻擊、暴力攻擊、規則攻擊等多種破解模式。
    • 使用方式:選擇攻擊模式和目標的密碼哈希,然後設定破解選項如字典檔或規則,工具會根據配置進行破解。
  • THC-Hydra:
    • 一個網路登入破解工具,適合用於暴力破解遠端服務的認證,支援多種協議如 SSH、FTP、HTTP、SMTP 等。
    • 使用方式:指定目標的服務協議和伺服器地址,設定攻擊方式,然後工具會針對目標進行暴力登入嘗試,嘗試破解帳戶密碼。
  • Medusa:
    • 一個快速且靈活的暴力破解工具,支援大量網路協議,可用於破解遠端系統的帳戶認證。
    • 使用方式:設定目標伺服器的協議和地址,選擇要攻擊的帳號及密碼字典,然後執行攻擊。
  • Secure Shell Bruteforcer:
    • 這是一個專門針對 SSH 的暴力破解工具,允許使用者對 SSH 服務進行暴力破解嘗試。
    • 使用方式:設定目標 SSH 伺服器的地址,並載入攻擊字典,工具會針對 SSH 密碼進行嘗試破解。

密碼加鹽 (Password Salting)

是一種技術,將一串隨機字符 (random string of characters) 添加到密碼中,然後再計算其雜湊值 (hashes)。

優點 (Advantage): 加鹽 (Salting) 使得反向工程雜湊值變得更加困難,並能有效對抗預先計算的雜湊攻擊 (pre-computed hash attacks)。

注意 (Note): Windows 密碼的雜湊值 (password hashes) 並未使用加鹽技術。


如何防禦密碼破解 (How to Defend against Password Cracking)

  1. 使用 information security audit 來監控並追蹤密碼攻擊。
  2. 禁止在更改密碼時使用相同的密碼 (same password)。
  3. 禁止密碼共享 (password sharing)。
  4. 禁止使用在字典中可以找到的密碼 (dictionary)。
  5. 不要使用明文協議 (cleartext protocols) 或弱加密協議 (weak encryption)。
  6. 將密碼更改政策 (password change policy) 設置為 30 天。
  7. 避免將密碼存放在不安全的位置。
  8. 不要使用系統默認的密碼 (default passwords)。
  9. 讓密碼難以猜測,要求密碼包含 8-12 個字母數字字符 (alphanumeric characters),包括大小寫字母、數字和符號。
  10. 確保應用程序不會將密碼存儲在內存中,也不會將它們以明文寫入磁碟中。
  11. 使用隨機字符串 (random string, salt) 作為密碼的前綴或後綴,然後再進行加密。
  12. 啟用 SYSKEY,並使用強密碼來加密和保護 SAM database
  13. 禁止使用如出生日期、配偶、孩子或寵物的名字作為密碼。
  14. 監控服務器日誌 (server’s logs) 以發現針對用戶帳戶的暴力攻擊。
  15. 鎖定那些因過多錯誤密碼猜測而被攻擊的帳戶。

漏洞利用 (Vulnerability Exploitation)

漏洞利用涉及執行多個複雜、相互關聯的步驟,以取得對遠程系統的存取權 (gain access to a remote system)。所涉及的步驟如下:

  1. 識別漏洞 (Identify the vulnerability)
  2. 確定與漏洞相關的風險 (Determine the risk associated with the vulnerability)
  3. 確定漏洞的能力 (Determine the capability of the vulnerability)
  4. 開發漏洞利用工具 (Develop the exploit)
  5. 選擇傳遞方式——本地或遠端 (Select the method for delivering – local or remote)
  6. 生成並傳遞有效載荷 (Generate and deliver the payload)
  7. 獲取遠程存取權 (Gain remote access)

Buffer Overflow (緩衝區溢位)

  • 緩衝區 (Buffer) 是分配給程序或應用來處理其運行時數據的一組相鄰的記憶體位置。
  • 緩衝區溢位 (Buffer overflow or overrun) 是應用程序或程序中的一種常見漏洞,當它接受超過分配給緩衝區的數據時,便會發生。
  • 這種漏洞允許應用程序在將數據寫入緩衝區時超出緩衝區範圍,並覆寫相鄰的記憶體位置。
  • 攻擊者利用緩衝區溢位漏洞來注入惡意代碼,損壞文件、修改程序數據、訪問關鍵資訊、提升權限、獲取 shell 存取權等。

為什麼程式和應用程序容易受到 Buffer Overflow 的影響?

  • 邊界檢查不足
  • 使用舊版本的編程語言
  • 使用不安全和易受攻擊的函數
  • 缺乏良好的編程實踐
  • 未能設置適當的過濾和驗證規則
  • 在堆疊段中執行代碼
  • 記憶體分配不當
  • 輸入過濾不充分

緩衝區溢位的類型

緩衝區溢位主要分為兩種:基於堆疊的緩衝區溢位 (Stack-Based Buffer Overflow)基於堆的緩衝區溢位 (Heap-Based Buffer Overflow)

1. 基於堆疊的緩衝區溢位 (Stack-Based Buffer Overflow)

大多數應用程式使用堆疊進行靜態記憶體分配。堆疊是一個儲存臨時變數的記憶體區塊,按照「後進先出 (Last-in First-out, LIFO)」的順序運作。當函式被呼叫時,所需的記憶體會在堆疊中分配,並在函式結束時自動釋放。

堆疊中的操作包括 PUSH(將資料儲存到堆疊)和 POP(從堆疊移除資料)。堆疊記憶體中包括以下五種暫存器:

  • EBP (Extended Base Pointer):儲存堆疊中第一個資料元素的位址。
  • ESP (Extended Stack Pointer):儲存下一個即將儲存到堆疊中的資料元素位址。
  • EIP (Extended Instruction Pointer):儲存下一個即將執行的指令位址。
  • ESI (Extended Source Index):維護來源索引,用於各種字串操作。
  • EDI (Extended Destination Index):維護目的索引,用於各種字串操作。

基於堆疊的緩衝區溢位 會發生在應用程式寫入比分配的記憶體更多的資料時。攻擊者可以利用此漏洞控制 EIP 暫存器,將函式的返回位址替換為惡意程式碼,以此獲取目標系統的 shell 存取權。

2. 基於堆的緩衝區溢位 (Heap-Based Buffer Overflow)

堆用於動態記憶體分配,在程式執行期間動態分配記憶體。與堆疊記憶體相比,存取堆記憶體的速度較慢。堆記憶體的分配與釋放並非自動進行,程式設計師需要使用例如 malloc() 函式來分配記憶體,並使用 free() 函式在執行完成後釋放記憶體。

基於堆的緩衝區溢位 會在分配給堆的記憶體區塊中寫入沒有邊界檢查的資料,導致覆寫動態記憶體分配連結、堆頭、堆中的資料或虛擬函式表等。這種漏洞通常出現在堆記憶體中,攻擊者可以利用該漏洞來控制程式的執行。

與堆疊溢位不同,堆溢位 的利用技術不統一,且表現多樣。堆溢位經常被發現為軟體安全漏洞,且與堆疊溢位相比,堆溢位的利用方式各異。

總結來說,這兩種緩衝區溢位的基本區別在於所處的記憶體區域不同,以及記憶體的分配和釋放方式不同,進而導致攻擊者利用這兩種漏洞的方式有所差異。


Windows 緩衝區溢位的利用

利用基於 Windows 的緩衝區溢位漏洞涉及以下步驟:

  1. 執行 Spiking

    Spiking 是一種測試技術,用於確定應用程式在接收過量資料時是否會崩潰。攻擊者會向應用程式發送異常的大量資料來觀察其反應,找出潛在的溢位點。

  2. 執行 Fuzzing

    Fuzzing 是另一種測試技術,攻擊者向應用程式隨機或有系統地輸入無效或異常的資料,以導致應用程式崩潰,從而找出可被利用的漏洞。

  3. 識別偏移量

    偏移量是指導致 EIP 暫存器 被覆寫的資料大小。通過找出具體的偏移量,攻擊者可以準確地覆寫 EIP 並控制程式的執行流。

  4. 覆寫 EIP 暫存器

    EIP 是控制程式執行流程的關鍵暫存器。通過覆寫 EIP,攻擊者可以控制下一條指令的執行,從而跳轉到惡意程式碼所在的位置。

  5. 識別錯誤字符 (Bad Characters)

    有些字符在傳輸或執行過程中可能會被應用程式錯誤地處理或截斷,這些字符被稱為「錯誤字符」。攻擊者需要識別並排除這些錯誤字符,以確保惡意程式碼正確執行。

  6. 識別正確的模組

    在應用程式內存中,攻擊者需要找到一個不受保護且可以利用的模組,通常這些模組沒有啟用如 DEP (Data Execution Prevention) 或 ASLR (Address Space Layout Randomization) 等安全防護機制。

  7. 生成 Shellcode

    Shellcode 是一段可執行的惡意程式碼,用來在受害者的系統上啟動一個命令行 shell 或執行其他惡意操作。攻擊者通常會生成針對目標系統的 Shellcode,以在利用成功後取得控制。

  8. 獲取 Root 權限

    利用成功後,攻擊者可以通過 shellcode 提升自己的權限,最終獲取系統的 root 或管理員權限,從而完全控制目標系統。


Return-Oriented Programming (ROP) 攻擊

Return-oriented programming (ROP) 是一種被攻擊者用來執行任意惡意程式碼的利用技術

攻擊者通過獲取對調用堆疊 (call stack) 的訪問,劫持目標的程式控制流 (program control flow),然後通過重複使用可用的庫中的指令序列(稱為gadgets)來執行任意機器指令。

Gadgets 是一組以 x86 RET 指令 結尾的指令集合。

攻擊者選擇一系列現有的 gadgets 來創建一個新程式,並惡意執行該程式。

ROP 攻擊非常有效,因為它們利用了可用的合法代碼庫,這些代碼庫不會被如 code signing(程式簽名)或 executable space protection(可執行空間保護)等安全機制識別。


Code

maliciousfunc() {
    ......
    Push addr_gadget(C)
    Push addr_gadget(B)
    MOV X0, gadgetA
    BR X0
}

Library

libFuncA() {
    ......
    <Useful gadget>
    Pop LR
    RET
}

libFuncB() {
    ......
    <Useful gadget>
    Pop LR
    RET
}

解釋:

  • 在程式碼中,惡意應用程式利用 緩衝區溢位 (buffer overflow) 來破壞Stack框架,控制程式的執行流程。
  • gadget A 從Stack中彈出並被調用,接著gadget Bgadget C 依次從Stack中彈出並返回執行。

Exploit Chaining(漏洞鏈接)

Exploit chaining,也被稱為 vulnerability chaining(漏洞鏈接),是一種將各種漏洞或弱點結合在一起進行的網路攻擊,目的是從根本上滲透並破壞目標系統。

在 exploit chaining 過程中,攻擊者首先會啟動 reconnaissance(偵察) 操作,然後開始逐一 enumerating(枚舉) 各種 digital footprints(數位足跡) 和軟體或硬體中的潛在漏洞,直到完全入侵目標系統。

流程:

  1. 啟動偵察(Initiates reconnaissance)。
  2. 逐一收集利用的漏洞(Gathers exploits one after another)。
  3. 將所有漏洞(如:exploit 1、exploit 2、exploit 3...)結合在一起以破壞系統(Combines all the exploits)。
  4. 獲取 root 級別的服務訪問權限(Gains access to root-level services)。

使用 PowerView 進行 Active Directory 枚舉

攻擊者通過 Active Directory (AD) 枚舉來提取敏感資訊,例如 usersgroupsdomains,以及其他來自目標 AD 環境的資源。攻擊者使用 PowerShell 工具如 PowerView 來枚舉 AD。

Domain Users 枚舉

Command Description
Get-NetUser 獲取與當前網域用戶相關的資訊
Get-NetLoggedon -ComputerName 獲取與當前活動域用戶相關的資訊
Get-UserProperty –Properties pwdlastset 獲取每個域用戶的密碼最後設置的日期和時間
Find-LocalAdminAccess 獲取當前域中具有本地管理員權限的用戶
Invoke-EnumerateLocalAdmin 列舉本地管理員權限的用戶(需要管理員權限執行)

Domain 枚舉

Command Description
Get-ADDomain 獲取與當前域相關的資訊,包括域控制器
Get-NetDomain 獲取與當前域相關的資訊,包括域控制器
Get-DomainSID 獲取當前域的 SID

Domain Policy 枚舉

Command Description
Get-DomainPolicy 獲取與當前域使用的政策相關的資訊
Get-DomainPolicy -“SystemAccess” 獲取與系統訪問配置相關的政策資訊
Get-DomainPolicy -“kerberospolicy” 獲取與當前域 Kerberos 政策相關的資訊

使用 Bloodhound 進行域映射與利用

Active Directory (AD) 的域映射提供組織內 AD 結構的總體架構,並以圖形用戶介面 (GUI) 形式呈現。

Bloodhound

  • 攻擊者嘗試識別目標組織 AD 環境中的 complex attack path,使用工具如 BloodhoundDocusnap
  • Bloodhound 使用 graph theory(圖論)來揭示 AD 環境內隱藏且經常未被注意的關係。

此工具有助於攻擊者了解網域中的複雜攻擊路徑,進一步利用這些關係發動攻擊。


緩衝區溢位檢測工具

以下討論了一些幫助安全專業人員檢測緩衝區溢位漏洞的工具:

OllyDbg

來源: https://www.ollydbg.de

OllyDbg 是一款適用於 Microsoft Windows的 32 位組合語言級別的分析除錯工具。由於其重點是二進制代碼分析,特別適用於無法獲得源代碼的情況下。它能除錯多執行緒應用程式並附加到正在運行的程式。OllyDbg 能夠識別複雜的代碼結構,如調用跳轉程序。它還能動態跟踪堆疊幀和程式執行,並記錄已知函數的參數。

此工具對於分析程式的二進制代碼特別有用,有助於識別緩衝區溢位等漏洞。


防禦緩衝區溢位的方法

  1. 遵循安全編碼實踐:開發程式時應遵循安全的編碼實踐和指導方針。
  2. 使用地址空間佈局隨機化 (ASLR) 技術:這可以增加攻擊者猜測地址的難度。
  3. 驗證參數並最小化需要 root 權限的代碼:減少不必要的權限以減少風險。
  4. 執行代碼審查:在源代碼層面使用靜態和動態代碼分析工具進行審查。
  5. 允許編譯器為所有緩衝區添加邊界:確保緩衝區大小不被超越。
  6. 實現自動邊界檢查:自動檢查緩衝區的邊界以防止溢位。
  7. 保護堆疊上的返回指標:避免攻擊者篡改返回地址。
  8. 禁止執行代碼空間外的代碼:確保代碼在預期範圍內運行。
  9. 定期更新補丁:為應用程式和作業系統進行定期補丁修補。
  10. 手動代碼檢查:使用檢查表手動檢查代碼是否符合安全標準。
  11. 使用資料執行保護 (DEP):將記憶體區域標記為不可執行。
  12. 實施代碼指標完整性檢查:檢測代碼指標是否在取消引用之前被破壞。

這章比較多還有提權等等還沒整理


上一篇
第14天:CEH Engage part 1
下一篇
第16天:CEH第六章系統入侵(特權提升)
系列文
腳本小子的滲透測試學習筆記16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言